#pragma once
#include <iostream>
#include <functional>
#include <string>

using std::cout;
using std::endl;

//回调的是业务处理
using func = std::function<std::string (std::string)>;
using wb = std:: function<void(std::string)>;

class Task
{
public:
    Task(std:: string msg, func cb, wb writebk) : _msg(msg), _cb(cb), _writebk(writebk)
    {
    }
    // 默认构造不可以删除！！！
    Task()
    {

    }
    // 对()进行重载 -- 仿函数
    // 仿函数要结合回调函数来看，它有返回值的话，仿函数的返回值也要设定
    void operator()()
    {
        _res = _cb(_msg);
        // std::cout << "任务已经处理完了... "<< _res << std::endl;
        _writebk(_res); //将结果写回去
    }
    ~Task()
    {
    }
    std::string getRes()
    {
        return _res;
    }

public:
    std:: string _msg;
    func _cb;
    std:: string _res;
    wb _writebk;  //因为时序问题，所以我们通过回调的方式去获取返回值
};